這個時候我突然想說,不然自己來設計格式吧,感覺會很有趣。其實我的想法也沒很困難,只要是和上面格子內容相同,我們就用’=’來替代。
當然,為了增加更多的’=’,我們先排序吧!順序為縣市名稱→鄉鎮市區→原始路名→郵遞區號→投遞範圍
with open('台灣郵遞區號.csv', newline='', encoding = "UTF-8", errors='ignore') as csvfile:
lst = [i for i in csv.reader(csvfile)]
# 按照 縣市名稱→鄉鎮市區→原始路名→郵遞區號→投遞範圍 順序調整(除非真的要自己試,不然這段不重要)
for i in range(1,len(lst)):
lst[i] = lst[i][1:4] + [lst[i][0]] + [lst[i][4]]
lst = sorted(lst)
接下來修改
for i in range(len(lst)-1,0,-1): # 由後往前改,才不會被改動影響
for j in range(5):
if lst[i][j] == lst[i-1][j]:
lst[i][j] = '='
with open('台灣郵遞區號.csv', 'w', newline='', encoding = "UTF-8") as csvfile:
csv.writer(csvfile).writerows(lst)
檔案瞬間小很多,檔案大小為:1,593,048 byte
檔案部分顯示
南投縣,中寮鄉,中集路,54155,全
=,=,仙峰巷,54154,=
=,=,仙洞巷,54155,=
=,=,仙鹿巷,=,=
=,=,內城巷,54154,=
=,=,初中巷,=,=
=,=,大湳巷,54155,=
=,=,復興巷,54154,=
=,=,愛鄉巷,=,=
=,=,新城巷,=,連5號至35號
=,=,=,54155,連3號以下
由於整份檔案都是五行一列,所以把所有的內容先扁平為一列,之後再恢復也不會失真
with open('台灣郵遞區號.csv', newline='', encoding = "UTF-8", errors='ignore') as csvfile:
lst = [i for i in csv.reader(csvfile)]
lst2 = []
for i in lst:
lst2 += i
with open('台灣郵遞區號.csv', 'w', newline='', encoding = "UTF-8") as csvfile:
csv.writer(csvfile).writerows([lst2])
檔案大小為:1,531,514 byte
到這裡,如果想要更進一步壓縮,只能想其他的辦法了。於是我決定使用字典的方式來繼續壓縮檔案。
自己嘗試壓縮文檔,到底有多少效果?——(3.)創建字典壓縮文檔